#include "form.h"
#include "ui_form.h"
#include "QtDebug"
#include "QPixmap"
#include "QFileDialog"

static QString tupian = ":/photo/wutu.png";
//定义一个json对象obj
static QJsonObject obj[20];

static int obj_num = 0;

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
    //最后再使用数据库
//    //在构造函数里创建和初始化数据库
//    //添加数据库驱动                             数据库类型  连接字
//    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","HD");
//    db.setDatabaseName("information.db");//设置数据库路径
//    if(!db.open())//打开数据库，并判断是否打开成功
//    {
//        qDebug()<<"open error";
//    }

//    //创建表格
//                       //sql语句
//    QString sql = QString("create table if not exists user(id integer primary key autoincrement, username ntext unique not null, password text not NULL)");
//    QSqlQuery query(QSqlDatabase::database("HD"));//访问连接字为"HD"数据库    用sql语句访问数据库

//    if(!query.exec(sql))//执行sql语句  并判断是否成功
//    {
//        qDebug()<<"create error";
//    }

    //输入框设置
    ui->lineEdit->setEnabled(false);
    ui->lineEdit_2->setEnabled(false);
    ui->lineEdit_3->setEnabled(false);
    ui->lineEdit_4->setEnabled(false);
    ui->lineEdit_5->setEnabled(false);
    ui->lineEdit_6->setEnabled(false);
    ui->lineEdit_7->setEnabled(false);
    ui->lineEdit_8->setEnabled(false);
    ui->lineEdit_9->setEnabled(false);
    ui->lineEdit_10->setEnabled(false);
    ui->lineEdit_11->setEnabled(false);
    ui->lineEdit_12->setEnabled(false);
    ui->pushButton_2->setEnabled(false);
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(false);
    ui->pushButton_6->setEnabled(false);
    //相机显示和设置框
    ui->label_15->hide();
    ui->pushButton_8->hide();
    ui->pushButton_9->hide();
    ui->label_16->hide();

    //相机初始化
    QList<QCameraInfo> infos = QCameraInfo::availableCameras();
    QCameraInfo info = infos.at(0);
    Cname = info.deviceName();
//    tts = new QTextToSpeech(this);
//    tts->say("欢迎使用！！！");
}

Form::~Form()
{
    delete ui;
}

//编辑
void Form::on_pushButton_clicked()
{
    ui->lineEdit->setEnabled(true);
    ui->lineEdit_2->setEnabled(true);
    ui->lineEdit_3->setEnabled(true);
    ui->lineEdit_4->setEnabled(true);
    ui->lineEdit_5->setEnabled(true);
    ui->lineEdit_6->setEnabled(true);
    ui->lineEdit_7->setEnabled(true);
    ui->lineEdit_8->setEnabled(true);
    ui->lineEdit_9->setEnabled(true);
    ui->lineEdit_10->setEnabled(true);
    ui->lineEdit_11->setEnabled(true);
    ui->lineEdit_12->setEnabled(true);
    ui->pushButton_2->setEnabled(true);
    ui->pushButton_3->setEnabled(true);
    ui->pushButton_4->setEnabled(true);
    ui->pushButton_6->setEnabled(true);
}



//获取信息
void Form::on_pushButton_7_clicked()
{
    QLineEdit *p[12] ={ui->lineEdit,ui->lineEdit_2,ui->lineEdit_3,ui->lineEdit_4,ui->lineEdit_5,ui->lineEdit_6,ui->lineEdit_7,ui->lineEdit_8,ui->lineEdit_9,ui->lineEdit_10,ui->lineEdit_11,ui->lineEdit_12};
    QString s[12];
    for(int i = 0;i < 12;i++)
    {
        s[i] = p[i]->text();
    }
    for (int i = 0; i < 12; ++i) {
        qDebug() << s[i];
    }
}

//显示本地图片
void Form::on_pushButton_2_clicked()
{
    tupian = QFileDialog::getOpenFileName(this);

    QPixmap pix(tupian);

    int w = ui->label_14->width();
    int h = ui->label_14->height();

    pix = pix.scaled(w,h);
    ui->label_14->setPixmap(pix);
}

//摄像录入
void Form::on_pushButton_3_clicked()
{

    QLineEdit *p[14] ={ui->lineEdit,ui->lineEdit_2,ui->lineEdit_3,ui->lineEdit_4,ui->lineEdit_5,ui->lineEdit_6,ui->lineEdit_7,ui->lineEdit_8,ui->lineEdit_9,ui->lineEdit_10,ui->lineEdit_11,ui->lineEdit_12,ui->lineEdit_13,ui->lineEdit_14};
    QLabel *q[14] = {ui->label,ui->label_2,ui->label_3,ui->label_4,ui->label_5,ui->label_6,ui->label_7,ui->label_8,ui->label_9,ui->label_10,ui->label_11,ui->label_12,ui->label_13,ui->label_14};
    QPushButton *t[6] = {ui->pushButton,ui->pushButton_2,ui->pushButton_3,ui->pushButton_4,ui->pushButton_6,ui->pushButton_7};

    ui->label_15->show();
    ui->pushButton_8->show();
    ui->pushButton_9->show();
    ui->label_16->show();
    for(int i = 0;i < 6;i++)
    {
        t[i]->hide();
    }
    for(int i = 0;i < 14;i++)
    {
        p[i]->hide();
    }
    for(int i = 0;i < 14;i++)
    {
        q[i]->hide();
    }

    //相机操作
    ca = new QCamera(Cname.toUtf8(),this);

    ui->label_15->show();

    //实例化截屏对象
    cap=new QCameraImageCapture(ca);
    //连接截屏信号和显示截屏的函数
    connect(cap,SIGNAL(imageCaptured(int,QImage)),this,SLOT(show_pic(int,QImage)));

    //设置摄像头
   QCameraViewfinder *v=new QCameraViewfinder(ui->label_15);//将输出窗口设置到控件名为label这个标签上
   v->resize(ui->label_15->size());//将输出窗口的大小设置的和label标签一致
   ca->setViewfinder(v);//设置摄像头的显示信息到输出窗口
   v->show();//显示输出窗口
   //启动摄像头
   ca->start();
}

//图片显示槽函数
void Form::show_pic(int id,const QImage &pre)
{
    qDebug()<<id;
    //将QImage转化为Qpixmap
    QPixmap pix=QPixmap::fromImage(pre);
    //显示图片
    pix=pix.scaled(ui->label_16->size());
    ui->label_16->setPixmap(pix);
}

//关闭相机
void Form::on_pushButton_9_clicked()
{
    QLineEdit *p[14] ={ui->lineEdit,ui->lineEdit_2,ui->lineEdit_3,ui->lineEdit_4,ui->lineEdit_5,ui->lineEdit_6,ui->lineEdit_7,ui->lineEdit_8,ui->lineEdit_9,ui->lineEdit_10,ui->lineEdit_11,ui->lineEdit_12,ui->lineEdit_13,ui->lineEdit_14};
    QLabel *q[14] = {ui->label,ui->label_2,ui->label_3,ui->label_4,ui->label_5,ui->label_6,ui->label_7,ui->label_8,ui->label_9,ui->label_10,ui->label_11,ui->label_12,ui->label_13,ui->label_14};
    QPushButton *t[6] = {ui->pushButton,ui->pushButton_2,ui->pushButton_3,ui->pushButton_4,ui->pushButton_6,ui->pushButton_7};

    //关闭相机
    ca->stop();

    //关闭相关窗口
    ui->label_15->hide();
    ui->pushButton_8->hide();
    ui->pushButton_9->hide();
    ui->label_16->hide();
    for(int i = 0;i < 6;i++)
    {
        t[i]->show();
    }
    for(int i = 0;i < 14;i++)
    {
        p[i]->show();
    }
    for(int i = 0;i < 14;i++)
    {
        q[i]->show();
    }

//    ui->label_16->clear();

    qDebug() << tupian;
    //访问图片路径
    QPixmap pix(tupian);

    //获取label的宽高
    int w=ui->label_14->width();
    int h=ui->label_14->height();

    //设置图片显示宽高
    pix=pix.scaled(w,h);

    //显示图片
    ui->label_14->setPixmap(pix);
}

//图像截取
void Form::on_pushButton_8_clicked()
{
    //获取当前文件路径
    QString Filepath;
    Filepath =QCoreApplication::applicationDirPath();

    //创建文件夹
    QDir *folder = new QDir;
    folder->mkdir(Filepath+"/photo");
   //获取时间
   QTime t = QTime::currentTime();
   tupian = Filepath+"/photo/"+t.toString("hh-mm-ss")+".jpg";
   qDebug()<<tupian;
   cap->capture(tupian);
}

//将信息提交网络
void Form::on_pushButton_6_clicked()
{
    //发送数据

    QString data=ui->lineEdit->text();//从编辑框获取数据
    QJsonDocument doc;//定义一个json的读写对象 doc
    for (int i = 0;i < obj_num;i++) {
        doc.setObject(obj[i]);//打包json对象
        QString data=QString(doc.toJson());//转换成QString格式
        msocket.writeDatagram(data.toUtf8(), QHostAddress(ui->lineEdit_13->text()), ui->lineEdit_14->text().toUShort());//发送数据
//        QThread::sleep(4);
    }
                        //utf8格式             发送的地址                               发送的端口号
//    msocket.writeDatagram(data.toUtf8(), QHostAddress(ui->lineEdit_13->text()), ui->lineEdit_14->text().toUShort());//发送数据
//    ui->lineEdit->clear();//清空编辑框
}

//录入信息
void Form::on_pushButton_4_clicked()
{
    QLineEdit *p[12] ={ui->lineEdit,ui->lineEdit_2,ui->lineEdit_3,ui->lineEdit_4,ui->lineEdit_5,ui->lineEdit_6,ui->lineEdit_7,ui->lineEdit_8,ui->lineEdit_9,ui->lineEdit_10,ui->lineEdit_11,ui->lineEdit_12};
    //将信息存入json对象中
    obj[obj_num].insert("s1",ui->lineEdit->text());//往json对象中插入键值对
    obj[obj_num].insert("s2",ui->lineEdit_2->text());
    obj[obj_num].insert("s3",ui->lineEdit_3->text());
    obj[obj_num].insert("s4",ui->lineEdit_4->text());
    obj[obj_num].insert("s5",ui->lineEdit_5->text());
    obj[obj_num].insert("s6",ui->lineEdit_6->text());
    obj[obj_num].insert("s7",ui->lineEdit_7->text());
    obj[obj_num].insert("s8",ui->lineEdit_8->text());
    obj[obj_num].insert("s9",ui->lineEdit_9->text());
    obj[obj_num].insert("s10",ui->lineEdit_10->text());
    obj[obj_num].insert("s11",ui->lineEdit_11->text());
    obj[obj_num].insert("s12",ui->lineEdit_12->text());
    obj[obj_num].insert("tupian",tupian);
    obj[obj_num].insert("type","information");

    //清除输入框的信息
    for (int i = 0; i < 12; ++i) {
        p[i]->clear();
    }
    //清除图片
    ui->label_14->clear();
    ui->label_16->clear();
    //清楚图片路径
    tupian = ":/photo/wutu.png";
    //记录录入信息数量
    obj_num++;

}

